<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用循环</title>
</head>
<body>

</body>
<script>
    // 通过手动遍历对象的属性并赋值到新对象来实现浅拷贝。

    const original = { a: 1, b: { c: 2 } };
    const shallowCopy = {};

    for (let key in original) {
        if (original.hasOwnProperty(key)) {
            shallowCopy[key] = original[key];
        }
    }

    console.log(shallowCopy); // { a: 1, b: { c: 2 } }
    console.log(shallowCopy.b === original.b); // true

    // 优点:

    // 可以定制拷贝行为，比如跳过某些属性。for in 会遍历自有可枚举的属性已经原型链可枚举库属性

    // 缺点:

    // 代码较繁琐，易出错。
    // 只能进行第一层属性的拷贝，对于嵌套对象只复制引用，无法深拷贝。
</script>
</html>